using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using Барс.Интерфейс;
using Барс.Ядро;


namespace Аккорд
{
	public static class СводныйОбщийОтчет
	{
        public static DataTable ПолучитьДанныеОтчета(DateTime началоПериода, DateTime окончаниеПериода)
        {
            DataTable результат = null;

            SQLЗапрос запрос = new SQLЗапрос();
            запрос.ТекстЗапроса = @"select 
CASE 
  WHEN res.c_name is null THEN 'Ошибка получения клиента!'
  ELSE res.c_name
END c_name,

CASE 
  WHEN res.man_name is null THEN '!!! Клиент не обслужен !!!'
  ELSE res.man_name
END man_name,

CASE 
  WHEN res.call_count is null THEN 0
  ELSE res.call_count
END call_count,

CASE
  WHEN res.meet_count is null THEN 0
  ELSE res.meet_count
END meet_count,

CASE  
  WHEN res.sale_count is null THEN 0
  ELSE res.sale_count
END sale_count,

CASE  
  WHEN res.sale_sum is null THEN 0
  ELSE res.sale_sum
END sale_sum

from (select distinct c.name c_name,
    CASE
      WHEN man.id is null THEN null
      ELSE man.surname || ' ' || man.man_name || ' ' || man.patronymic
    END man_name,
    (select count(*)
       from call cl
      where cl.client_id = c.id
        and cl.manager_id = man.id 
        and (cl.connect_date >= :p0 and cl.connect_date <= :p1) ) call_count,
    (select count(*)
       from meeting meet
      where meet.client_id = c.id
        and meet.manager_id = man.id
        and (meet.connect_date >= :p0 and meet.connect_date <= :p1)) meet_count,
    (select count(*)
       from sale s
      where s.client_id = c.id
        and s.manager_id = man.id
        and (s.connect_date >= :p0 and s.connect_date <= :p1)) sale_count,
    (select sum(s.amount)
       from sale s
      where s.client_id = c.id
        and s.manager_id = man.id
        and (s.connect_date >= :p0 and s.connect_date <= :p1)) sale_sum
  from client c
  left join client_man_connect cm on cm.CLIENT_ID = c.id
  left join manager man on man.id = cm.MANAGER_ID) res";

            try
            {
                запрос.ДобавитьПараметрЗапроса(началоПериода);
                запрос.ДобавитьПараметрЗапроса(окончаниеПериода);
                результат = запрос.Выполнить().ПолучитьDataTable();
            }
            catch (Exception ex)
            {
                результат = null;
                Сообщение.ПоказатьИсключительнуюСитуацию("Ошибка получения данных отчета.", ex);
            }

            return результат;
        }
	}
}